package entity

import (
	"server/world/scene"
)

var _ scene.Entity = (*Monster)(nil)

// Monster 怪物实体，实现Entity接口
type Monster struct {
	Entity
	Name    string // 怪物名称
	Level   int    // 等级
	HP      int    // 当前生命值
	MaxHP   int    // 最大生命值
	Attack  int    // 攻击力
	Defense int    // 防御力
}

// NewMonster 创建新的怪物实体
func NewMonster(id int64, name string, level, hp, attack, defense int, x, y float64) *Monster {
	m := &Monster{
		Name:    name,
		Level:   level,
		HP:      hp,
		MaxHP:   hp,
		Attack:  attack,
		Defense: defense,
	}
	m.id = id
	m.x, m.y = x, y
	return m
}

// GetType 获取实体类型，实现Entity接口
func (m *Monster) GetType() scene.EntityType {
	return scene.EntityTypeMonster
}

// Remove 移除怪物实例
func (m *Monster) Remove() {
	if m.layer == nil {
		return
	}
	layer := m.layer
	layer.Remove(m, m.x, m.y)
}

// UpdatePosition 更新怪物位置
func (m *Monster) UpdatePosition(newX, newY float64) {
	if m.layer == nil {
		return
	}
	if !m.SetStatus(scene.EntityStatusNone, scene.EntityStatusMovement) {
		return
	}
	defer func() {
		m.status = int32(scene.EntityStatusNone)
	}()

	layer := m.layer
	if layer.Move(m, newX, newY) {
		m.x, m.y = newX, newY
	}
}

// TakeDamage 受到伤害
func (m *Monster) TakeDamage(damage int) {
	if damage > 0 {
		damageDealt := damage - m.Defense
		if damageDealt < 1 {
			damageDealt = 1
		}
		m.HP -= damageDealt
		if m.HP < 0 {
			m.HP = 0
		}
	}
}

// IsDead 检查是否死亡
func (m *Monster) IsDead() bool {
	return m.HP <= 0
}